dplyr 和 tidyr 包教程

概述

dplyr 和 tidyr 是 R 语言中用于数据处理和清洗的两个非常强大的包。dplyr 提供了简洁的语法来处理数据框,而 tidyr 则专注于数据的整理和重塑。这两个包通常一起使用,以实现高效的数据处理。

安装和加载包

在开始之前,首先需要安装并加载 dplyr 和 tidyr 包。

# 安装包
install.packages("dplyr")
install.packages("tidyr")

# 加载包
library(dplyr)
library(tidyr)

dplyr 包

1. 基本操作

dplyr 提供了几个核心函数来处理数据框:

  • select(): 选择列
  • filter(): 过滤行
  • mutate(): 创建或修改列
  • arrange(): 排序行
  • summarize(): 汇总数据
  • group_by(): 分组操作

示例数据

我们使用 dplyr 包自带的 starwars 数据集作为示例。

# 查看数据集
head(starwars)

2. 选择列 (select())

选择特定的列:

# 选择名字和性别列
selected_data <- select(starwars, name, gender)
head(selected_data)

3. 过滤行 (filter())

根据条件过滤行:

# 过滤出性别为“male”的行
filtered_data <- filter(starwars, gender == "male")
head(filtered_data)

4. 创建或修改列 (mutate())

创建新的列或修改现有列:

# 创建一个新列,表示身高是否超过180cm
mutated_data <- mutate(starwars, height_over_180 = height > 180)
head(mutated_data)

5. 排序行 (arrange())

按列排序:

# 按身高降序排列
arranged_data <- arrange(starwars, desc(height))
head(arranged_data)

6. 汇总数据 (summarize())

对数据进行汇总:

# 计算平均身高
summary_data <- summarize(starwars, avg_height = mean(height, na.rm = TRUE))
summary_data

7. 分组操作 (group_by())

按组进行操作:

# 按性别分组,计算每组的平均身高
grouped_data <- starwars %>%
  group_by(gender) %>%
  summarize(avg_height = mean(height, na.rm = TRUE))
grouped_data

tidyr 包

1. 数据整理

tidyr 提供了几个函数来整理数据:

  • gather(): 将宽数据转换为长数据
  • spread(): 将长数据转换为宽数据
  • separate(): 将一列拆分为多列
  • unite(): 将多列合并为一列

2. 宽数据转换为长数据 (gather())

# 创建示例数据
wide_data <- data.frame(
  name = c("Alice", "Bob"),
  math = c(90, 80),
  science = c(85, 95)
)

# 转换为长数据
long_data <- gather(wide_data, key = "subject", value = "score", math, science)
long_data

3. 长数据转换为宽数据 (spread())

# 转换为宽数据
wide_data_again <- spread(long_data, key = "subject", value = "score")
wide_data_again

4. 拆分列 (separate())

# 创建示例数据
separated_data <- data.frame(
  full_name = c("Alice Smith", "Bob Johnson")
)

# 拆分列
separated_data <- separate(separated_data, full_name, into = c("first_name", "last_name"), sep = " ")
separated_data

5. 合并列 (unite())

# 合并列
united_data <- unite(separated_data, full_name, first_name, last_name, sep = " ")
united_data

实践练习

练习 1: 数据清洗

  1. 读取一个包含缺失值的 CSV 文件。
  2. 使用 dplyr 和 tidyr 进行数据清洗,包括删除缺失值、填充缺失值、转换数据格式等。

练习 2: 数据重塑

  1. 创建一个包含多个变量的宽数据框。
  2. 使用 tidyr 将其转换为长数据格式。
  3. 再将其转换回宽数据格式。

练习 3: 数据分析

  1. 使用 dplyr 对一个数据集进行分组汇总操作。
  2. 计算每组的平均值、最大值和最小值。

总结

dplyr 和 tidyr 是 R 语言中处理数据的强大工具。通过本教程,你应该已经掌握了如何使用这两个包进行数据清洗、整理和分析。继续练习和探索,你将能够更高效地处理各种数据任务。